<button class="layui-btn layui-bg-red" id="DaiLianTong_autoDispatchButton">自动派单</button>

<!-- 自动派单模态框 -->
<div id="autoDispatchModal" style="display: none;">
    <div style="padding: 20px;">
        <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px;">
            <h3 style="margin: 0;">自动派单控制台</h3>
            <div style="display: flex; gap: 10px; align-items: center;">
                <select id="DaiLianTong_consoleColorScheme" style="padding: 4px;">
                    <option value="light">浅色主题 (默认)</option>
                    <option value="dark">深色主题 (黑屏白字)</option>
                    <option value="highContrast">高对比度</option>
                </select>
            </div>
        </div>

        <!-- 模拟控制台区域 -->
        <div id="consoleArea" style="
            height: 300px;
            border: 1px solid #e6e6e6;
            background-color: #f8f8f8;
            padding: 10px;
            overflow-y: auto;
            font-family: monospace;
            font-size: 14px;
            margin-bottom: 20px;
        "></div>

        <!-- 停止按钮 -->
        <div style="text-align: center;">
            <button id="stopAutoDispatchBtn" class="layui-btn layui-btn-danger">停止自动派单</button>
        </div>
    </div>
</div>

<script>
    // 全局变量，存储模态框ID
    let DaiLianTong_dispatchModalInstance = null;
    // 全局变量，控制自动派单循环
    let DaiLianTong_autoDispatchLoop = true;

    /**
     * 向控制台输出日志信息
     * @param {string} level - 等级：警告、异常、正常
     * @param {string} message - 信息内容
     */
    window.DaiLianTong_logToConsole = function (level, message) {
        const consoleArea = document.getElementById('consoleArea');
        const now = new Date();
        const seconds = now.getSeconds().toString().padStart(2, '0');

        // 根据等级设置不同的颜色
        let color = '';
        switch (level) {
            case '警告':
                color = '#FF7F50'; // 橙色
                break;
            case '异常':
                color = '#FF4500'; // 红色
                break;
            case '正常':
                color = '#32CD32'; // 绿色
                break;
            default:
                color = '#000000'; // 黑色
        }

        // 创建日志条目
        const logEntry = document.createElement('div');
        logEntry.innerHTML = `[${seconds}][<span style="color: ${color};">${level}</span>]: ${message}`;

        // 添加到控制台并滚动到底部
        consoleArea.appendChild(logEntry);
        consoleArea.scrollTop = consoleArea.scrollHeight;
    };



    // 获取代练通订单
    async function DaiLianTong_Function_GetOrders() {
        let response = await axios({
            url: "/api/dailiantong/get_order_list/",
            params: {
                price_str: document.querySelector("#DaiLianTong_priceRange").value || "10_60"
            }
        })
        if (response.data.code !== 0) {
            window.DaiLianTong_logToConsole('异常', '获取订单列表失败');
            return null;
        }
        window.DaiLianTong_logToConsole('正常', '获取订单列表成功');
        window.DaiLianTong_logToConsole('正常', `获取到${response.data.data.length}个订单`);
        window.DaiLianTong_logToConsole('正常', `开始对订单进行字段处理`);
        let data = response.data.data.map(order => ({
            amount: order.Price,
            efficiencyDeposit: order.Ensure2,
            gameRegionName: order.Zone,
            hour: order.TimeLimit,
            securityDeposit: order.Ensure1,
            title: order.Title,
            dailiantong_order_id: order.SerialNo,
        }));

        return data;
    }







    // 自动派单
    window.DaiLianTong_Function_AutoDispatch = async function () {
        // 重置自动派单循环标志
        DaiLianTong_autoDispatchLoop = true;
        
        // 关闭已存在的模态框
        if (DaiLianTong_dispatchModalInstance !== null) {
            layer.close(DaiLianTong_dispatchModalInstance);
        }

        // 使用正确的jQuery对象方式获取元素
        const modalContent = window.BS_Layui_$('#autoDispatchModal');

        // 打开新的模态框
        DaiLianTong_dispatchModalInstance = layer.open({
            type: 1,
            title: '自动派单进行中',
            content: modalContent,
            area: ['800px', '450px'],
            shade: 0.6,
            btn: [], // 不显示默认按钮
            cancel: function () {
                // 防止通过关闭按钮直接关闭模态框
                return false;
            }
        });

        // 清空控制台
        document.getElementById('consoleArea').innerHTML = '';

        // 模拟输出一些日志
        window.DaiLianTong_logToConsole('正常', '开始自动派单流程');
        
        // 自动派单主循环
        while (DaiLianTong_autoDispatchLoop) {
            try {
                // 调用获取余额函数
                await window.DaiLianTong_getWanziBalance();
                
                // 获取余额值
                let balanceText = document.querySelector("#DaiLianWangZiBalance").value;
                if (balanceText === '') {
                    window.DaiLianTong_logToConsole('警告', '未能获取到余额信息');
                    // 等待5秒后重试
                    await new Promise(resolve => setTimeout(resolve, 5000));
                    continue;
                }
                
                // 提取数值部分并转换为浮点数
                let balance = parseFloat(balanceText);
                if (isNaN(balance)) {
                    window.DaiLianTong_logToConsole('警告', '余额格式错误，无法解析');
                    // 等待5秒后重试
                    await new Promise(resolve => setTimeout(resolve, 5000));
                    continue;
                }
                
                // 检查余额是否大于10元
                if (balance <= 10) {
                    window.DaiLianTong_logToConsole('警告', `余额不足（当前余额：${balance}元），等待余额充足...`);
                    
                    // 等待10秒后再次检查余额
                    let waitInterval = 0;
                    while (balance <= 10 && DaiLianTong_autoDispatchLoop) {
                        waitInterval += 1;
                        if (waitInterval % 10 === 0) { // 每10秒重新获取一次余额
                            await window.DaiLianTong_getWanziBalance();
                            balanceText = document.querySelector("#DaiLianWangZiBalance").value;
                            balance = parseFloat(balanceText);
                        }
                        
                        // 检查是否停止派单
                        if (!DaiLianTong_autoDispatchLoop) break;
                        
                        // 等待10秒
                        await new Promise(resolve => setTimeout(resolve, 10000));
                    }
                    
                    // 如果是因为停止派单而跳出循环，直接结束整个流程
                    if (!DaiLianTong_autoDispatchLoop) break;
                    
                    window.DaiLianTong_logToConsole('正常', '余额充足，继续自动派单流程');
                }
                
                // 获取订单列表
                let orders = await DaiLianTong_Function_GetOrders();
                if (orders === null || !DaiLianTong_autoDispatchLoop) {
                    // 如果获取订单失败或已停止派单，等待5秒后重试
                    if (DaiLianTong_autoDispatchLoop) {
                        await new Promise(resolve => setTimeout(resolve, 5000));
                    }
                    continue;
                }
                
                // 处理每个订单
                for (const order of orders) {
                    // 检查是否停止派单
                    if (!DaiLianTong_autoDispatchLoop) break;
                    
                    // 再次获取最新余额
                    balanceText = document.querySelector("#DaiLianWangZiBalance").value;
                    balance = parseFloat(balanceText);
                    
                    // 检查余额是否足够
                    if (balance < order.amount) {
                        window.DaiLianTong_logToConsole('警告', `余额不足（${balance}元），无法对 ${order.title} 派单`);
                        // 跳出订单处理循环，回到主循环重新检查余额
                        break;
                    }
                    
                    window.DaiLianTong_logToConsole('正常', `开始对 ${order.title} 进行派单`);
                    
                    // 发送派单请求
                    var fadanResponse = await axios({
                        url: "/api/dailianwanzi/publish_order/",
                        params: order,
                    });
                    
                    if (fadanResponse.data.code !== 0) {
                        window.DaiLianTong_logToConsole('异常', fadanResponse.data.message);
                        // 继续处理下一个订单
                        continue;
                    }
                    
                    window.DaiLianTong_logToConsole('正常', `对 ${order.title} 派单成功`);
                    
                    // 更新余额
                    balance = balance - order.amount;
                    document.querySelector("#DaiLianWangZiBalance").value = balance.toFixed(2) + ' 元';
                    
                    // 派单成功后，随机等待3-5秒再处理下一个订单
                    const waitTime = Math.floor(Math.random() * 2000) + 3000; // 生成3000-5000毫秒的随机等待时间
                    window.DaiLianTong_logToConsole('正常', `等待${waitTime/1000}秒后继续处理下一个订单`);
                    await new Promise(resolve => setTimeout(resolve, waitTime));
                }
                
                // 所有订单处理完成后，等待5秒再开始下一轮
                if (DaiLianTong_autoDispatchLoop) {
                    await new Promise(resolve => setTimeout(resolve, 5000));
                }
            } catch (error) {
                window.DaiLianTong_logToConsole('异常', `自动派单过程中发生错误: ${error.message}`);
                // 发生错误后，等待5秒再重试
                if (DaiLianTong_autoDispatchLoop) {
                    await new Promise(resolve => setTimeout(resolve, 5000));
                }
            }
        }
    };

    // 停止自动派单
    window.DaiLianTong_stopAutoDispatch = function () {
        DaiLianTong_logToConsole('异常', '已点击停止自动派单');
        
        // 设置循环标志为false，停止自动派单循环
        DaiLianTong_autoDispatchLoop = false;

        // 模拟停止派单的处理逻辑
        setTimeout(function () {
            DaiLianTong_logToConsole('正常', '正在终止所有派单进程');
            DaiLianTong_logToConsole('正常', '派单进程已全部终止');

            // 3秒后自动关闭模态框
            setTimeout(function () {
                if (DaiLianTong_dispatchModalInstance !== null) {
                    layer.close(DaiLianTong_dispatchModalInstance);
                    DaiLianTong_dispatchModalInstance = null;
                }
            }, 3000);
        }, 1000);
    };

    // 自动派单按钮点击事件
    document.querySelector('#DaiLianTong_autoDispatchButton').addEventListener('click', function () {
        DaiLianTong_Function_AutoDispatch();
    });

    // 停止自动派单按钮点击事件
    document.querySelector('#stopAutoDispatchBtn').addEventListener('click', function () {
        DaiLianTong_stopAutoDispatch();
    });

    /**
     * 切换控制台颜色方案
     */
    function DaiLianTong_Function_ChangeConsoleColorScheme() {
        const consoleArea = document.getElementById('consoleArea');
        const scheme = document.getElementById('DaiLianTong_consoleColorScheme').value;
        
        // 重置所有样式
        consoleArea.style.backgroundColor = '#f8f8f8';
        consoleArea.style.color = '#000000';
        consoleArea.style.borderColor = '#e6e6e6';
        
        // 应用选择的主题
        switch (scheme) {
            case 'dark':
                consoleArea.style.backgroundColor = '#000000';
                consoleArea.style.color = '#ffffff';
                consoleArea.style.borderColor = '#333333';
                break;
            case 'highContrast':
                consoleArea.style.backgroundColor = '#1a1a1a';
                consoleArea.style.color = '#ffff00';
                consoleArea.style.borderColor = '#ffff00';
                break;
            case 'light':
            default:
                // 浅色主题已在重置时设置
                break;
        }
        
        // 重新应用日志颜色样式，确保新主题下日志颜色也正确
        const logEntries = consoleArea.querySelectorAll('div');
        logEntries.forEach(entry => {
            const levelSpan = entry.querySelector('span');
            if (levelSpan) {
                // 根据主题调整日志文字颜色
                const levelText = levelSpan.textContent;
                switch (levelText) {
                    case '警告':
                        levelSpan.style.color = '#FF7F50'; // 橙色
                        break;
                    case '异常':
                        levelSpan.style.color = '#FF4500'; // 红色
                        break;
                    case '正常':
                        levelSpan.style.color = '#32CD32'; // 绿色
                        break;
                    default:
                        levelSpan.style.color = scheme === 'dark' ? '#ffffff' : '#000000';
                }
            }
        });
    }

    // 添加颜色方案切换事件
    document.querySelector('#DaiLianTong_consoleColorScheme').addEventListener('change', function () {
        DaiLianTong_Function_ChangeConsoleColorScheme();
    });
</script>